from strategy.StrategyTemplate import StrategyTemplate
from utils.jsl_data_map import default_columns
from strategy import strategy_filter
# from utils.simple_utls import code_fix
import pandas as pd
# from database.lhjy import engine
#TODO 待实现
class yaoZhai(StrategyTemplate):
    """
      根据历史最高价和最低价确定一个等差数列，判断妖债当前价格投资星级，星级越高越值得买入。

      筛选方法:

          手动筛选历史妖债，溢价率上过100%，价格上过180元
      买入方法:

          进入5星级的妖债可以买入，每跌10元补仓
      卖出方法:

          1. 买入后设置回落卖出条件单，高于4星级价格X，回落1%，买三价卖出，高级设置-延迟确认-连续确认3次
          2. X=投资区间第二个价格
          3. 原则上只要上涨10元就可以卖出
      详细介绍: 妖债策略进阶玩法

      """
    def __init__(self):
        super(self.__class__, self).__init__()
        self.strategy_name = "启四偏离策略"
        self.strategy_descrption = "按涨幅排序"

    def run(self):
        # 基础过滤，过滤掉新债、强赎、EB
        self.data = strategy_filter.filter_base(self.data)

        for code in self.data['转债代码']:
            code_with_pre = code_fix(code)
            try:
                if code_with_pre is not None:
                    code_table = pd.read_sql_table(code_with_pre, con=engine)
                    result = self.calc(code_table)
                    # result = calc_dic[calc_name](code_table, arg1, arg2)
                    self.data.loc[self.data['转债代码'] == code, 'yao_flag'] = result
            except ValueError as e:
                pass

        self.data = self.data.loc[self.data['yao_flag'] == True]
        self.data = self.data[['转债名称', '转债代码', '现价', '剩余年限', '溢价率', '到期税前收益',
                               '剩余规模', '集思录评分', '富投评分', '行业']][:20]
        # 清掉原来的索引
        self.data.reset_index(inplace=True, drop=True)


if __name__ == '__main__':
    ins = yaoZhai()
    ins.topN = 20
    ins.test()

